%include "Macro/Instructions.inc"

; %1 数字
; %2 存放字符的地址

%macro itoa 2
	multipush ax,cx,dx
        
    	mov eax, %1 ; ax占用地位被除数
	    mov edx, %1
	    shr edx, 16 ; dx占用高位被除数
    .rem:    ;求余，把对应的数字转换成ASCII码 
	    mov cx, 10  ;设置除数  
	    div cx
	    add cx, 30H ;把余数转换成ASCII码  
	    push cx     ;把对应的ASCII码压入栈中  
	    or ax, dx   ;判断商是否为0  
	    mov cx, ax  
	    jcxz .copy   ;商为0，表示除完  
	    jmp .rem     ;否则，继续相除  
          
    .copy:   ;把栈中的数据复制到string中
    	mov si, %2
    .loop_copy:
	    pop cx      ;ASCII码出栈  
	    mov [si], cl;把字符保存到string中  
	    jcxz .return    ;若0出栈，则退出复制  
	    inc si      ;指向下一个写入位置  
	    jmp .loop_copy    ;若0没出栈，则继续出栈复制数据  
          
    .return:;恢复寄存器内容，并退出子程序  

	multipop ax,cx,dx
%endmacro ; 共 8 字节